package cn.tedu.plus.localDateTime;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;

public class LocalDateDemo {
    public static void main(String[] args) {

        //通过现在日期获取localDate对象
        LocalDate localDate1 = LocalDate.now();
        System.out.println("获取当前时间对应的LocalDate对象");
        System.out.println(localDate1);
        System.out.println();

        //通过指定日期数值获取localDate对象
        System.out.println("通过2015，3，26创建LocalDate对象");
        LocalDate localDate2 = LocalDate.of(2015,3,26);
        System.out.println(localDate2);
        System.out.println();

        //通过日期字符串获取localDate对象
        System.out.println("通过\"2023-07-15\"字符串获取对应的LocalDate对象");
        LocalDate localDate3 = LocalDate.parse("2023-07-15");
        System.out.println(localDate3);
        System.out.println();

        //获取值方法
        //获取年份
        int year = localDate1.getYear();
        System.out.println("getYear() : " + year);
        //获取月份
        int monthValue = localDate1.getMonthValue();
        System.out.println("getMonthValue() : " + monthValue);
        //获取日
        int dayOfMonth = localDate1.getDayOfMonth();
        System.out.println("getDayOfMonth() : " + dayOfMonth);
        //获取一年中第几天
        int dayOfYear = localDate1.getDayOfYear();
        System.out.println("getDayOfYear() : " + dayOfYear);
        //获取星期
        int dayOfWeek = localDate1.getDayOfWeek().getValue();
        System.out.println("getDayOfWeek().getValue() : " + dayOfWeek);
        //是否闰年(false平年)
        boolean leapYear = localDate1.isLeapYear();
        System.out.println("isLeapYear() : " + leapYear);
        //本月有多少天
        int lengthOfMonth = localDate1.lengthOfMonth();
        System.out.println("lengthOfMonth() : " + lengthOfMonth);
        //本年有多少天
        int lengthOfYear = localDate1.lengthOfYear();
        System.out.println("lengthOfYear() : " + lengthOfYear);

        System.out.println();

        LocalDate result;
        System.out.println(localDate3);
        //修改值，返回新的LocalDate
        //改年份
        result = localDate3.withYear(2009);
        System.out.println("改创2009年 ： " + result);
        //改月份
        result = result.withMonth(5);
        System.out.println("改创5月 ： " + result);
        //改日份
        result = result.withDayOfMonth(23);
        System.out.println("改创23日 ： " + result);
        //改全年第几天
        result = result.withDayOfYear(35);
        System.out.println("改创全年第35天 ： " + result);

        System.out.println();

        System.out.println(localDate3);
        //增加年
        result = localDate3.plusYears(2);
        System.out.println("加2年 : " + result);
        //减少年
        result = localDate3.minusYears(5);
        System.out.println("减5年 : " + result);
        //增加月
        result = localDate3.plusMonths(8);
        System.out.println("加8月 : " + result);
        //减少月
        result = localDate3.minusMonths(9);
        System.out.println("减9月 : " + result);
        //增加星期
        result = localDate3.plusWeeks(5);
        System.out.println("加5周 : " + result);
        //减少星期
        result = localDate3.minusWeeks(1);
        System.out.println("减1周 : " + result);
        //添加天数
        result = localDate3.plusDays(3);
        System.out.println("加3天 : " + result);
        //减少天数
        result = localDate3.minusDays(5);
        System.out.println("减5天 : " + result);

        System.out.println();

        //通过with得到相关LocalDate对象
        System.out.println(localDate2);
        //该月第一天
        result = localDate2.with(TemporalAdjusters.firstDayOfMonth());
        System.out.println("该月第一天 : " + result);
        //该月最后一天
        result = localDate2.with(TemporalAdjusters.lastDayOfMonth());
        System.out.println("该月最后一天 : " + result);
        //下个月第一天
        result = localDate2.with(TemporalAdjusters.firstDayOfNextMonth());
        System.out.println("下个月第一天 : " + result);
        //该年第一天
        result = localDate2.with(TemporalAdjusters.firstDayOfYear());
        System.out.println("该年第一天 : " + result);
        //该年最后一天
        result = localDate2.with(TemporalAdjusters.lastDayOfYear());
        System.out.println("该年最后一天 : " + result);
        //下一年第一天
        result = localDate2.with(TemporalAdjusters.firstDayOfNextYear());
        System.out.println("下一年第一天 : " + result);

        System.out.println();

        //通过LocalDate对象创建LocalDateTime对象
        System.out.println(localDate2);
        LocalDateTime localDateTime;
        //一天的开始时间
        localDateTime = localDate2.atStartOfDay();
        System.out.println("一天的开始时间 : " + localDateTime);
        //设置时，分，秒，纳秒
        localDateTime = localDate2.atTime(9,43);
        System.out.println("加9:43 : " + localDateTime);
        localDateTime = localDate2.atTime(9,43,27);
        System.out.println("加9:43:27 : " + localDateTime);
        localDateTime = localDate2.atTime(9,43,27,1234);
        System.out.println("加9:43:27:000001234 : " + localDateTime);





    }
}
